Este conjunto de dados foi simulado e disponibilizado por Ludovic Benistant para o site Kaggle. Fonte: Kaggle - Ludovic Benistant - Hr Analytics
Atributos:
Objetivo O objetivo deste projeto é explorar as variáveis do conjunto de dados hr que podem auxiliar na identificação dos fatores que levaram alguns colaboradores a deixarem a empresa. Durante a investigação estas perguntas serão respondidas:
## [1] "satisfaction_level" "last_evaluation"
## [3] "number_project" "average_montly_hours"
## [5] "time_spend_company" "Work_accident"
## [7] "left" "promotion_last_5years"
## [9] "sales" "salary"
** Visão Geral dos dados**
Sumário das informações:
## satisfaction_level last_evaluation number_project average_montly_hours
## Min. :0.0900 Min. :0.3600 Min. :2.000 Min. : 96.0
## 1st Qu.:0.4400 1st Qu.:0.5600 1st Qu.:3.000 1st Qu.:156.0
## Median :0.6400 Median :0.7200 Median :4.000 Median :200.0
## Mean :0.6128 Mean :0.7161 Mean :3.803 Mean :201.1
## 3rd Qu.:0.8200 3rd Qu.:0.8700 3rd Qu.:5.000 3rd Qu.:245.0
## Max. :1.0000 Max. :1.0000 Max. :7.000 Max. :310.0
##
## time_spend_company Work_accident left
## Min. : 2.000 Min. :0.0000 Min. :0.0000
## 1st Qu.: 3.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median : 3.000 Median :0.0000 Median :0.0000
## Mean : 3.498 Mean :0.1446 Mean :0.2381
## 3rd Qu.: 4.000 3rd Qu.:0.0000 3rd Qu.:0.0000
## Max. :10.000 Max. :1.0000 Max. :1.0000
##
## promotion_last_5years sales salary
## Min. :0.00000 sales :4140 high :1237
## 1st Qu.:0.00000 technical :2720 low :7316
## Median :0.00000 support :2229 medium:6446
## Mean :0.02127 IT :1227
## 3rd Qu.:0.00000 product_mng: 902
## Max. :1.00000 marketing : 858
## (Other) :2923
Os dados são consistentes e analisando o valor mínimo, médio, mediana e valor máximo, não foi possível verificar nesta análise inicial a existência de outliers.
Vamos conferir qual a estrutura dos dados, e se será necessário manipular os tipos das variáveis para auxiliar a análise.
str(hr)
## 'data.frame': 14999 obs. of 10 variables:
## $ satisfaction_level : num 0.38 0.8 0.11 0.72 0.37 0.41 0.1 0.92 0.89 0.42 ...
## $ last_evaluation : num 0.53 0.86 0.88 0.87 0.52 0.5 0.77 0.85 1 0.53 ...
## $ number_project : int 2 5 7 5 2 2 6 5 5 2 ...
## $ average_montly_hours : int 157 262 272 223 159 153 247 259 224 142 ...
## $ time_spend_company : int 3 6 4 5 3 3 4 5 5 3 ...
## $ Work_accident : int 0 0 0 0 0 0 0 0 0 0 ...
## $ left : int 1 1 1 1 1 1 1 1 1 1 ...
## $ promotion_last_5years: int 0 0 0 0 0 0 0 0 0 0 ...
## $ sales : Factor w/ 10 levels "accounting","hr",..: 8 8 8 8 8 8 8 8 8 8 ...
## $ salary : Factor w/ 3 levels "high","low","medium": 2 3 3 2 2 2 2 2 2 2 ...
O conjunto de dados é composto por 14.999 observações e 10 variáveis. Não tem nenhuma variável que seja uma identificação única do colaborador, então vamos considerar que cada registro corresponde a uma pessoa, sem duplicação.
As variáveis sales e salary são do tipo factor, vou criar duas variáveis não categóricas baseadas nelas. Essas duas variáveis serão utilizadas posteriormente no cálculo da correlação.
# Cria variável salary_le, versão numéricas de salary
hr$salary_le = c("high"=0, "low"=1, "medium"=2)[as.numeric(hr$salary)]
# Cria variável sales_le, versão numéricas de sales
hr$sales_le = c("accounting"=0, "hr"=1, "IT"=2, "management"=3, "marketing"=4, "product_mng"=5, "RandD"=6, "sales"=7, "support"=8, "technical"=9)[as.numeric(hr$sales)]
O nível de satisfação do colaborador será agrupado em três níveis: SIM, NÃO e REGULAR.
# Cria novo campo satisfied no conjunto de dados hr
hr$satisfied <- as.factor(ifelse(hr$satisfaction_level<=.40, "NAO", ifelse(hr$satisfaction_level<=.70, "REGULAR", "SIM")))
Conferindo os campos criados:
table(hr$salary_le)
##
## 0 1 2
## 1237 7316 6446
table(hr$sales_le)
##
## 0 1 2 3 4 5 6 7 8 9
## 767 739 1227 630 858 902 787 4140 2229 2720
table(hr$satisfied)
##
## NAO REGULAR SIM
## 3124 5577 6298
Será que existem valores nUlos? Vamos percorrer todas as variáveis somando todos os valores nulos.
# Verifica o total de NA em cada campo
for (i in 1:9) {
print (paste(names(hr[i]) , sum(is.na(hr[i])), sep="="))
next
}
## [1] "satisfaction_level=0"
## [1] "last_evaluation=0"
## [1] "number_project=0"
## [1] "average_montly_hours=0"
## [1] "time_spend_company=0"
## [1] "Work_accident=0"
## [1] "left=0"
## [1] "promotion_last_5years=0"
## [1] "sales=0"
O conjunto de dados está completamente preenchido e não será necessário excluir oS valores nulos através do comando abaixo:
Em média as pessoas trabalham 200 horas mensalmente, a maioria das pessoas trabalha entre 130 e 270 horas. No Brasil trabalham-se aproximadamente 220 horas mensais, então é bem razoável a distribuição do tempo.
A empresa tem alguns colaboradores que trabalham por mais de 7 anos, mas o mais comum é passar entre 2 e 4 anos na empresa.
prop.table(table(hr$left))
##
## 0 1
## 0.7619175 0.2380825
A proporção de colaboradores que deixaram a empresa é de 24% do conjunto de dados.
Para facilitar a comparação, agrupei as informações entre contratados e demitidos. O fato de ter recebido ou não promoção nos últimos anos não variou de maneira significativa entre os dois grupos.
O maior grupo de satisfeitos está entre os que ainda estão contratados, apesar de terem colaboradores com uma satisfação baixa, o maior pico de insatisfeitos está entre os desligados. Observa-se que alguns colaboradores com um nível alto de satisfação deixaram a empresa, e isto será investigado no decorrer deste projeto.
A distribuição do nível de satisfação e da nota da última avaliação é bem similar nos dois grupos. Além dos satisfeitos, colaboradores bem avaliados também deixaram a empresa.
# Agrupa o total de resultados por departamento
Funcionarios_departamento <- aggregate(hr$sales, by=list(hr$sales) ,FUN = length)
formattable(Funcionarios_departamento, list(
x = color_tile("white", "#6699CC")))
| Group.1 | x |
|---|---|
| accounting | 767 |
| hr | 739 |
| IT | 1227 |
| management | 630 |
| marketing | 858 |
| product_mng | 902 |
| RandD | 787 |
| sales | 4140 |
| support | 2229 |
| technical | 2720 |
Os departamentos support, technical e sales são os mais populosos da empresa, com 9089 colaboradores no total.
Para os desligados, os insatisfeitos formam o maior grupo, já no grupo dos que ainda são colaboradores o maior grupo é dos satisfeitos, seguido dos que tem uma satisfação regular.
A estrutura de dados é composta por 14.999 observações, 10 variáveis importadas com o arquivo original. Três variáveis foram adicionadas: 1. Salary_le: salary é uma variável categórica e criei a salary_le com a representação numerica de cada nível de salary; 2. Sales_le: É a mesma situação de salary, sales_le é a representação numérica dos valores de sales. 3. satisfied: Criei faixas de satisfação para facilitar a impressão de algumas informações nos gráficos.
A variável left representa os colaboradores que ainda estão na empresa com o valor para colaboradores que permanecem na empresa e 1 para colaboradores desligados.
A maioria das variáveis são numéricas e duas são categóricas representadas por fatores: sales com 10 níveis e salary com 3.
A principal variável de interesse do conjunto é left, que informa se o colaborador está na empresa ou se foi desligado. A variável com o nível de satisfação (satisfaction_level) também será foco da análise, uma vez que, a correlação das outras variáveis com ela pode ajudar a compreender os motivos que levaram as pessoas a deixarem a empresa.
promotion_last_5years: O total de promoções recebidas (promotion_last_5years) pode gerar uma insatisfação no colaborador se ele supor que não foi reconhecido;
time_spend_company: O tempo passado numa empresa pode gerar uma necessidade de sair da empresa, nem sempre por uma causa negativa, mas pela vontade de viver novos desafios;
salary: Essa variável é categorica com os valores baixo, médio e alto. A relação da remuneração com o satisfação e a decisão de saída será avaliado, apesar de várias pesquisas indicarem que o salário nem sempre é um grande influenciador nesta decisão. É possível que variáveis como número de promoções e nota recebida na ultima avaliação pesem mais na sensação de ter o trabalho reconhecido e este é um fator importante;
number_project: Esta variável traz o total de projetos trabalhados pela pessoa, não sabemos se é o total em determinado período ou durante toda a permanência na empresa, mas, mesmo assim, podemos explorar questões como: as pessoas com mais números de projetos eram mais satisfeitas ou se sentiam sobrecarregadas e deixaram a empresa?
sales: Há algum departamento problemático com baixo nível de satisfação? Acredito que esta questão é importante de ser investigada e pode ser impactante no resultado final.
O conjunto de dados estava bem consistente, as alterações realizadas foram para adaptar as informações para análise. Salary e Sales são do tipo factor, para elas criei duas novas variaveis, Salary_le e Sales_le para representa-las numericamente. É uma especíe de versão LabelEncoder de cada uma delas.
Foi criada a variável satisfied, do tipo factor com 3 níveis: SIM, NAO e REGULAR. O objetivo desse campo é facilitar na visualização das faixas de satisfação dos colaboradores. As faixas definidas para este projeto sem qualquer compromisso com valores padrões de um departamento de recursos humanos.
Pesquisei variaveis NA, mas o grupo não tinha nenhuma. Variáveis sem conteúdo não foram pesquisadas porque na importação do arquivo eu atribui por padrão o valor NA para elas (na.strings=c(“”,“NA”)), então, automaticamente ao pesquisar por NA, eu já estava pesquisando pelas vazias.
Em alguns gráficos, transformei a variável left em factor para auxiliar o agrupamento dos dados em 0 e 1, e não na média destes dois números.
Observando o sumário das variáveis, os dados são consistentes e sem outliers, portanto não foi necessário manipular o conteúdo.
A variável salary, cujo conteúdo é a faixa do salário (alto, médio, baixo), seria uma ótima candidata a ter a operação log10 aplicada a seu conteúdo caso ele fosse o valor monetário do salário.
Agora que já conhecemos um poucos as variáveis do conjunto de dados, vamos verificar como elas se relacionam. Nesta seção tentaremos responder as perguntas descritas no ínicio do trabalho.
Entre as pessoas que sairam temos todas as faixas de salário, o volume de pessoas com salário alto é menor e não está presente em todos os departamentos. Mas o gráfico já é suficiente para responder a pergunta, as pessoas que saíram recebiam, em sua maioria, um salário baixo ou médio.
Investigando um pouco mais o departamento, vamos ver a proporção de pessoas que sairam de cada uma deles.
| Departamento | 0 | 1 |
|---|---|---|
| accounting | 73 | 27 |
| hr | 71 | 29 |
| IT | 78 | 22 |
| management | 86 | 14 |
| marketing | 76 | 24 |
| product_mng | 78 | 22 |
| RandD | 85 | 15 |
| sales | 76 | 24 |
| support | 75 | 25 |
| technical | 74 | 26 |
Os departamentos de gerencia (management) e pesquisa e desenvolvimento (RandD) tiveram a menor evasão de colaboradores. Os outros departamentos tiveram entre 22 e 29%. Abaixo podemos ver esta distribuição:
Quando comparados, as pessoas que deixaram a empresa obtiveram uma mediana maior, principalmente no departamento RandD. No departamento de marketing e hr, as pessoas trabalharam entre 150 e 250h mas com uma mediana menor.
| Departamento | Contratado | Desligado |
|---|---|---|
| accounting | 199.0373 | 207.0294 |
| hr | 199.2500 | 197.3070 |
| IT | 198.8868 | 213.8498 |
| management | 200.2338 | 207.2637 |
| marketing | 198.8885 | 200.9901 |
| product_mng | 197.7656 | 207.7879 |
| RandD | 198.9520 | 210.9752 |
| sales | 199.5717 | 205.0414 |
| support | 199.1410 | 205.6360 |
| technical | 198.4711 | 214.1836 |
Com exceção do departamento de recursos humanos (hr), os colaboradores que se desligaram da empresa trabalharam em média mais do que os dos outros departamentos, atingindo uma média mensal superior a 200 horas. Foram realçados em vermelho os casos em que o grupo de desligados trabalhou por mais horas.
Sabemos que os colaboradores que se desligaram trabalharam por mais horas, será que eles conseguiram ficar por muitos anos na empresa?
Este gráfico trás uma informação interessante, de maneira geral as pessoas não saem da empresa no primeiro ano de trabalho. Os que saem após esse período, são os que trabalharam em média mais tempo por mês.O grupo de maior volume é formado por colaboradores que atuam na empresa a mais de 7 anos.
Outro ponto é que as pessoas que deixam a empresa não chegaram a completar 5 anos de trabalho. Em compração, os que permanecem na empresa chegaram a trabalhar por 10 anos.
Nós vemos uma insatisfação nos colaboradores que deixam a empresa no 3º ou 4º anos. Aparentemente se você passa por essa fase, o nível de satisfação cresce, ficando acima de 0.75, mas mesmo assim, os colaboradores saem entre o 5º e 6º, e nunca atingem o 7º ano. O ideal para este caso é que tivéssemos um histórico dos níveis de satisfação destas pessoas, ano após ano, assim conseguiríamos projetar a partir de qual ano a insatisfação tende a aumentar ou diminuir.
será que há uma variação similar na nota de avaliação recebida por este colaborador durante os anos trabalhados? Para descobrir isso, vamos ver a nota de avaliação por ano trabalhado:
O 3º ano parece um pouco crítico, não? Vimos no gráfico anterior que muitos dos que saíram demonstraram um nível de satisfação baixo, e neste gráfico percebemos que no 3º a maioria dos desligados receberam uma nota baixa na avaliação. Pode ser motivado por uma avaliação mais rigorosa da empresa após de 3 anos de trabalho ou pode existir uma política específica para este período.
Do 4º ano em diante os desligados receberam em sua maioria uma boa nota na avaliação, em geral acima de 0.8.
Ter mais tempo de empresa não significa que o salário será melhor. Do sexto para o 10º ano a faixa salarial que prevalece é a média, mas como os que saíram não chegaram a completar 7 anos de trabalho, não é possível verificar se isso se repetiria para eles.
Mesmo tendo sofrido acidente de trabalho, os colaboradores permanecem na empresa.
Vamos a outra questão: Quem tem mais projetos trabalha mais?
Sim. Na média, quem teve mais projetos trabalhou mais horas mensais. Faz bastante sentido que seja assim, mais carga de trabalho, mais tempo necessário para resolve-la.
Agora que já temos uma impresssão sobre o conjunto de dados, vamos, através do cálculo da correlação entre as variáveis, verificar se os valores obtidos nos ajudam a aprofundar a exploração das variáveis.
Correlação entre todas as variáveis do conjunto de dados hr:
Correlação entre as variáveis do subconjunto de dados dos colaboradores desligados.
Quando calculada a correlação só para os dados dos colaboradores desligados, a correlação entre as variáveis fica mais forte.
Valores de correlação para o conjunto hr:
## satisfaction_level last_evaluation number_project
## satisfaction_level 1.00000000 0.105021214 -0.142969586
## last_evaluation 0.10502121 1.000000000 0.349332589
## number_project -0.14296959 0.349332589 1.000000000
## average_montly_hours -0.02004811 0.339741800 0.417210634
## time_spend_company -0.10086607 0.131590722 0.196785891
## Work_accident 0.05869724 -0.007104289 -0.004740548
## left -0.38837498 0.006567120 0.023787185
## promotion_last_5years 0.02560519 -0.008683768 -0.006063958
## average_montly_hours time_spend_company
## satisfaction_level -0.020048113 -0.100866073
## last_evaluation 0.339741800 0.131590722
## number_project 0.417210634 0.196785891
## average_montly_hours 1.000000000 0.127754910
## time_spend_company 0.127754910 1.000000000
## Work_accident -0.010142888 0.002120418
## left 0.071287179 0.144822175
## promotion_last_5years -0.003544414 0.067432925
## Work_accident left promotion_last_5years
## satisfaction_level 0.058697241 -0.38837498 0.025605186
## last_evaluation -0.007104289 0.00656712 -0.008683768
## number_project -0.004740548 0.02378719 -0.006063958
## average_montly_hours -0.010142888 0.07128718 -0.003544414
## time_spend_company 0.002120418 0.14482217 0.067432925
## Work_accident 1.000000000 -0.15462163 0.039245435
## left -0.154621634 1.00000000 -0.061788107
## promotion_last_5years 0.039245435 -0.06178811 1.000000000
# Imprime a matriz com todos os gráficos em um arquivo svg. Retire o eval=FALSE para executar esta célula.
jpeg(filename = "gg.jpg")
print(g)
dev.off()
ggpair
Para o contexto, a correlação entre left e satisfaction_level é a mais forte, mesmo não sendo tão forte de maneira geral.
with(hr, cor.test(left, satisfaction_level, method = 'pearson'))
##
## Pearson's product-moment correlation
##
## data: left and satisfaction_level
## t = -51.613, df = 14997, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.4018809 -0.3747001
## sample estimates:
## cor
## -0.388375
A variável left e os anos de trabalho de na empresa variam com o passar do tempo. O 3º ano parece ser o mais crítico, onde são registrados níveis de satisfação baixos, nos anos seguintes há um aumento e não foi registrada nenhuma saída após o colaborador completar 7 anos de casa.
As notas recebidas na avaliação também variam com o passar do tempo. No terceiro ano é registrado o maior volume de notas baixas entre os que deixaram a empresa, e os outros com mais tempo de trabalho, receberam boas notas em suas avaliações.
Boa parte dos que tiveram acidente de trabalho durante sua jornada permaneceram na empresa, há uma correlação muito fraca entre essas variáveis de -0.1546.
A medida que o número de projetos aumenta, também aumenta o média de horas trabalhadas por mês. E essa correlação é a mais forte do grupo sendo 0.4172.
Trabalhar por anos na empresa não está relacionado a um aumento da faixa de salário. Para aprofundar esta análise seria necessário saber o valor do salário recebido porque pode ter havido um aumento no valor, sem que isso significasse uma troca na faixa salarial (Baixo, Médio e Alto).
O relacionamento mais forte foi encontrado entre as variáveis número de projetos e média de horas trabalhadas. Não é claro se o total de projetos trabalhados corresponde a um período, por exemplo, são os projetos trabalhados no mês, no ano, desde a contratação? Supondo que seja mensal, faria todo sentido dizer que quem executou mais projetos, consequentemente pode ter tido que trabalhar mais horas no mês. Saber o nível de complexidade do projeto nos auxiliaria na interpretação da relação da quantidade de projetos e o tempo necessário para executá-lo.
No que interessa a esta análise, que é investigar o porque alguns colaboradores deixaram a empresa, a variável nível de satisfação é a que tem a correlação mais forte com left, indicador de desligamento. Obteve-se o valor de correlação igual a -0.388375, ou seja, 40% dos desligamentos poderiam ser explicados pelo nível de satisfação, mas isso não significa que seja a causa dele.
Distribuição da carga de trabalho por departamento:
Para responder a esta pergunta, o primeiro passo é criar um dataset com os dados dos colaboradores que atendem aos determinados critérios: 1. Na última avaliação tiveram nota superior a 0.7; 2. Trabalharam na empresa por mais de 4 anos; 3. Trabalharam em mais de 5 projetos; 4. No mês, em média, trabalharam mais de 200 horas
## [1] 961
Foi criado o data.frame hr_func_bons com 961 registros.
Não é nada surpreendente que as pessoas tenham saído da empresa, elas trabalharam mais pela mesma faixa de salário. Claro que para uma análise mais efetiva destas variáveis, seria necessário saber, por exemplo, na faixa de altos salários se os valores são os mesmos, ou se os que trabalhavam mais recebiam uma quantia maior, mesmo sendo caracterizado como a mesma faixa.
Vamos fazer a mesma análise só que observando o total de projetos x horas trabalhadas.
No comparativo entre os permanecem na empresa e os que saíram é possível ver que mesmo entre os melhores os que saíram trabalhavam mais e exceto pelos departamentos de product_mng e sales, trabalharam por salários baixos e médianos.
Bem, esse gráfico nos leva às seguintes observações: 1. Nesta perspectiva os desligados continuam trabalhando por mais horas que os contratados; 2. As horas mensais trabalhadas entre os contratados varia quase que de maneira imperceptível independente do número de projetos. As pessoas que trabalharam em 6 projetos, trabalharam entre 150 e 250 horas mensais da mesma forma que os que trabalharam em 2 projetos; 3. As pessoas que deixaram a empresa trabalharam mais horas por mês que os que ainda estão contratados. Para este grupo, a média de horas trabalhadas aumentou a medida que o número de projetos aumentou; 4. Os demitidos foram os únicos que trabalharam em 6 projetos ou mais.
O que eu quero saber é se é a percepção que o colaborador tem de sí, ou seja, seu nível de satisfação se relaciona de alguma forma com a forma como o empregador percebe o colaborador e atribui uma pontuação para isso através da avaliação.
Entre os que se desligaram da empresa, tem três grupos bem distintos: 1. Insatisfeitos, mas reconhecidos como bons pela empresa; Neste grupo nós temos uma associação claramente negativa entre estas duas variáveis. 2. Insatisfeitos e não reconhecidos, ou seja, obtiveram nota baixa na avaliação; 3. Satisfeitos e reconhecidos como bons colaboradores.
Receber uma nota ruim na avaliação não é um atributo comum entre os que saíram.
Muitíssimo interessante que entre os desligados a divisão dos insatisfeitos esteja bem clara. Nesta visão, fica evidente, mas sem explicar a causa, o desequilíbrio na hora trabalhada. Respondendo a questão inicial, os insatisfeitos viveram duas situações, a que trabalharam mais que a média e a que trabalharam bem menos que a média mensal para essa variável que são 200 horas mensais. A medida que as horas trabalhadas se aproximaram desta faixa de 200 a 250, a satisfação aumentou.
O mesmo gráfico impresso para o conjunto de dados dos “bons colaboradores” evidência como os que se desligaram trabalharam em média por mais horas em comparação com os que ainda trabalham na empresa, para esses os pontos no gráfico são mais dispersos.
Vamos imprimir esse mesmo gráfico para os colaboradores que registraram um rendimento inferior.
## [1] 3248
Neste grupo nós vemos que os que permaneceram na empresa tiveram uma tendência positiva na satisfação, mantendo-se entre 0.5 e 1. Os desligados estavam mais insatisfeitos, talvez porque não desenvolveram seu potencial máximo, ou não foram envolvidos em muitos projetos. Como estamos falando de comportamento humano, fica difícil inferir sobre a motivação real sem conhecer mais variáveis.
## [1] "Total de colaboradores medianos desligados:"
## [1] 1526
## [1] "Total de bons colaboradores desligados:"
## [1] 851
## Aggregation requires fun.aggregate: length used as default
| Satisfacao | Contratado | Desligado |
|---|---|---|
| NAO | 59 | 845 |
| REGULAR | 28 | 3 |
| SIM | 23 | 3 |
Mais uma vez confirmamos que a maior parte dos bons colaboradores desligados era composta por colaboradores insatisfeitos.
Aumentando o contexto vamos comparar o total por faixa tanto para os desligados, quanto para os contratados.
table(hr$satisfied)
##
## NAO REGULAR SIM
## 3124 5577 6298
by(hr$left==1, hr$satisfied, summary)
## hr$satisfied: NAO
## Mode FALSE TRUE NA's
## logical 1389 1735 0
## --------------------------------------------------------
## hr$satisfied: REGULAR
## Mode FALSE TRUE NA's
## logical 4674 903 0
## --------------------------------------------------------
## hr$satisfied: SIM
## Mode FALSE TRUE NA's
## logical 5365 933 0
A medida que diminui a faixa de satisfação, nós percebemos um aumento no total de desligados e uma diminuição dos contratados.
Já exploramos e tiramos algumas conclusões sobre o relacionamento das variáveis do conjunto de dados, agora vamos criar um modelo linear tendo como variável focal left.
m1 <- lm(left ~ satisfaction_level, data = hr)
m2 <- update(m1, ~ . + time_spend_company)
m3 <- update(m2, ~ . + average_montly_hours)
m4 <- update(m3, ~ . + number_project)
mtable(m1, m2, m3, m4)
##
## Calls:
## m1: lm(formula = left ~ satisfaction_level, data = hr)
## m2: lm(formula = left ~ satisfaction_level + time_spend_company,
## data = hr)
## m3: lm(formula = left ~ satisfaction_level + time_spend_company +
## average_montly_hours, data = hr)
## m4: lm(formula = left ~ satisfaction_level + time_spend_company +
## average_montly_hours + number_project, data = hr)
##
## ====================================================================
## m1 m2 m3 m4
## --------------------------------------------------------------------
## (Intercept) 0.646*** 0.526*** 0.445*** 0.501***
## (0.009) (0.012) (0.017) (0.018)
## satisfaction_level -0.665*** -0.647*** -0.646*** -0.665***
## (0.013) (0.013) (0.013) (0.013)
## time_spend_company 0.031*** 0.029*** 0.033***
## (0.002) (0.002) (0.002)
## average_montly_hours 0.000*** 0.001***
## (0.000) (0.000)
## number_project -0.031***
## (0.003)
## --------------------------------------------------------------------
## R-squared 0.2 0.2 0.2 0.2
## adj. R-squared 0.2 0.2 0.2 0.2
## sigma 0.4 0.4 0.4 0.4
## F 2663.9 1450.7 985.3 773.5
## p 0.0 0.0 0.0 0.0
## Log-likelihood -7254.4 -7154.2 -7131.3 -7073.6
## Deviance 2310.4 2279.7 2272.8 2255.4
## AIC 14514.8 14316.3 14272.6 14159.3
## BIC 14537.7 14346.8 14310.7 14205.0
## N 14999 14999 14999 14999
## ====================================================================
As variáveis satisfaction_level, time_spend_company, average_montly_hours e number_project obtiveram o mesmo r² de 0.2. 20% é um resultado fraco e abaixo da minha expectativa.
Neste ponto, sei que o nível de satisfação pode estar relacionado com o desligamento do colaborador, por isso vou criar um outro modelo em que esta variável seja o ponto focal para as outras.
m1 <- lm(satisfaction_level ~ average_montly_hours, data = hr)
m2 <- update(m1, ~ . + time_spend_company)
m3 <- update(m3, ~ . + number_project)
m4 <- update(m4, ~ . + promotion_last_5years)
mtable(m1, m2, m3, m4)
##
## Calls:
## m1: lm(formula = satisfaction_level ~ average_montly_hours, data = hr)
## m2: lm(formula = satisfaction_level ~ average_montly_hours + time_spend_company,
## data = hr)
## m3: lm(formula = left ~ satisfaction_level + time_spend_company +
## average_montly_hours + number_project, data = hr)
## m4: lm(formula = left ~ satisfaction_level + time_spend_company +
## average_montly_hours + number_project + promotion_last_5years,
## data = hr)
##
## =====================================================================
## m1 m2 m3 m4
## ---------------------------------------------------------------------
## (Intercept) 0.633*** 0.680*** 0.501*** 0.500***
## (0.008) (0.009) (0.018) (0.018)
## average_montly_hours -0.000* -0.000 0.001*** 0.001***
## (0.000) (0.000) (0.000) (0.000)
## time_spend_company -0.017*** 0.033*** 0.034***
## (0.001) (0.002) (0.002)
## satisfaction_level -0.665*** -0.662***
## (0.013) (0.013)
## number_project -0.031*** -0.031***
## (0.003) (0.003)
## promotion_last_5years -0.177***
## (0.022)
## ---------------------------------------------------------------------
## R-squared 0.0 0.0 0.2 0.2
## adj. R-squared 0.0 0.0 0.2 0.2
## sigma 0.2 0.2 0.4 0.4
## F 6.0 77.5 773.5 634.5
## p 0.0 0.0 0.0 0.0
## Log-likelihood -403.7 -329.7 -7073.6 -7041.2
## Deviance 926.8 917.7 2255.4 2245.6
## AIC 813.5 667.3 14159.3 14096.3
## BIC 836.3 697.8 14205.0 14149.6
## N 14999 14999 14999 14999
## =====================================================================
20% do nível de satisfação pode ser explicado pelos números de projetos e promoções nos últimos 5 anos. Este relacionamento não implica causalidade.
Quando o nível de satisfação de todo o grupo é analisado fica evidente uma distribuição bem diferente entre os que permanecem na empresa e os que saem. Os colaboradores que ficaram tem uma satisfação de regular a satisfeito, com um volume pequeno de colaboradores insatisfeitos. Entre os que saíram o grupo de insatisfeitos é o maior, demonstrando a correlação observada entre elas, mas não é possível afirmar que a insatisfação seja a causa de uma demissão por exemplo.
As horas mensais trabalhadas também desempenharam um papel importante no grupo dos demitidos, sendo comum encontrar as informações polarizadas em muito ou pouco trabalho.
Foi uma surpresa descobrir que o trabalhar por menos horas que a média mensal foi um fator comum entre os desligados.
Sim, foram criados dois modelos, um para left e outro para satisfaction_level.
No 1º foi criado um modelo linear de regressão para verificar a relação entre left e as variáveis satisfaction_level, time_spend_company, average_montly_hours, number_project. As variáveis foram selecionadas com base no valor de correlação encontrada entre elas. O resultado recebido foi um pouco decepcionante porque o r² mesmo ajustado só consegue explicar 20% da variável dependente left. Outro valor a ser observado pelo modelo é que há uma alta significância entre as variáveis demonstrado pelo valor de p=0.
No 2º modelo o objetivo do modelo linear de regressão foi relacionar o nível de satisfação com a outras variáveis. Se não estar satisfeito pode estar relacionado, sem ser a causa, com a saída do colaborador, então o que poderia estar relacionado com a baixa satisfação dele? No modelo criado com total de anos trabalhados na empresa e a média mensal de horas trabalhadas tem o menor valor de r²=0, e as variáveis com o número de projetos trabalhados e a existência de promoção nos últimos anos demonstraram uma correlação baixa com a baixa satisfação dele sendo r²=0.2.
Os colaboradores que mais trabalham são os mais bem pagos?
Para minha surpresa, não. Entre os que não fazem mais parte da empresa, os com alto salário trabalharam em menos projetos e obtiveram uma nota baixa na avaliação. Os com boa nota na avaliação (acima de 0.7) trabalharam em mais de 4 projetos. Os com nota inferior a 0.6 trabalharam em sua maioria em 2 projetos. Os contratados tem uma distribuição mais uniforme da satisfação e a maior parte trabalha de 3 a 5 projetos.
Mais uma vez conseguimos visualizar a distribuição das horas trabalhadas pelos que se desligaram da empresa. Eles estão polarizados em dois grupos bem definidos, hora trabalham acima da média ou bem abaixo. Nos departamentos Sales e Support, nós vemos, para os que ainda trabalham na empresa, uma incidência maior da faixa média de salário, mas no grupo dos desligados não é possível observar a prevalência desta faixa, a maioria deles recebia um baixo salário.
Como não temos o cargo ocupado por cada um deles, fica difícil traçar uma comparação entre eles. Nesta análise estamos supondo que eles ocupam cargos similares.
Para complementar nossa análise vamos criar um novo modelo, usando o método rpart para construir uma árvore de decisão. Ao fim do processo teremos uma visualização boa dos dados.
Primeiro precisamos separar uma amostra de dados de teste e outra de treino. Estou definindo que ela tenha 80% do tamanho do original. Vou alterar o conteúdo de left, 0=Contratado e 1=Demitido.
hr$left <- factor(hr$left, labels=c("Contratado", "Desligado"))
# Cria amostra com 80% do tamanho de hr
sample_size <- floor(0.80 * nrow(hr))
# Set.seed para fins do resultado randomico
set.seed(123)
# Cria lista de índices
train_ind <- sample(seq_len(nrow(hr)), size = sample_size)
# Amostra para treino
train <- hr[train_ind, 1:8]
# Amostra para teste
test <- hr[-train_ind, 1:8 ]
O modelo vai se basear nas variáveis que já foram investigadas até agora e que consideramos importante durante a análise exploratória. O fator a ser predito será left, ou seja, se o colaborador permanecerá ou sairá, e o modelo se baseará no nível de satisfação, nota da última avaliação, média mensal de horas trabalhadas, número de projetos e anos trabalhados na empresa.
# Cria o modelo
fit <- rpart(left ~ satisfaction_level + last_evaluation + average_montly_hours + number_project + time_spend_company,
data=train,
method="class")
# Prediz o resultado
predicted_hr <- predict(fit, test)
auc(as.numeric(test$left) - 1, predicted_hr[, 2])
## Area under the curve: 0.9713
Uau! O classificador teve uma excelente pontuação de 0.97.
Agora que sabemos que temos um ótimo modelo, vamos plotar a árvore de decisões.
rpart.plot(fit, extra=104, box.palette="GnBu", branch.lty=3, shadow.col="gray", nn=TRUE)
De fato é um bom modelo, veja como ele espelha e reforça a análise realizada anteriormente, o colaborador com nível de satisfação baixo, muitos projetos, ou satisfeito e trabalhando por muitas horas mensais tem uma probabilidade maior de sair.
É sempre muito estimulante investigar uma base de dados buscando por fatores que possam auxiliar a uma organização a reter seus talentos e manter-se com um time de alto nível. A limitação desta análise é que ela é baseada em comportamento humano, e as poucas variáveis do conjunto de dados não são suficientes para entregar um resultado consistente que possa ser seguido pela organização. Seria muito produtivo para esta análise sabermos informações sobre os cargos, o nível de satisfação por ano de trabalho, o nível de complexidade dos projetos trabalhados e até mesmo o regime de contratação.
Com as informações disponíveis foi possível identificar o quanto a carga de trabalho é um fator determinante para saída do colaborador. Mesmo que ele tenha obtido uma boa nota na avaliação e esteja satisfeito, se ele estiver com uma carga excessiva de projeto e horas de trabalho ele provavelmente sairá. Mas se ele já está um pouco insatisfeito e a empresa atribuir a ele muitas horas ou menos horas do que a média trabalhada por todos, é possível que ele também saia.
Eu gostaria de ter mais informações sobre o valor monetário do salário. Entender se a remuneração pode ser um fator de insatisfação é dificil quando você não sabe o cargo e o salário real. O que pode ser percebido em relação ao reconhecimento do trabalhado é que foram registradas pouquíssimas promoções, inclusive a proporção de acidentes de trabalho é superior do que a de promoções. Entre os demitidos poucas pessoas tinham um alto salário.
Mesmo não tendo todas as variáveis que considero importante, foi divertido investigar as questões propostas no ínicio deste projeto, eu diria que criar o modelo para a árvore da decisão, e obter um AUC tão alto, foi um dos pontos mais compensadores do processo.